home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / language / embedded / m68k / tutor.arc / MS.SA < prev    next >
Text File  |  1990-01-05  |  3KB  |  101 lines

  1. MS       IDNT      1,0       Memory set command                      11/02/81
  2.  
  3.          XDEF      MSCMD
  4.          XDEF      MSG017
  5.          XDEF      SETME
  6.  SPC 1
  7.          XREF      CKADDR
  8.          XREF      FIXBUF
  9.          XREF      FIXDCRLF
  10.          XREF      FNEXTF
  11.          XREF      GETA
  12.          XREF      GETNUMA
  13.          XREF      MACSBUG
  14.          XREF      MSG
  15.          XREF      OUTPUT
  16.          XREF      PNT8HX
  17.          XREF      PORTIN1
  18.          XREF      SYNTAX
  19.  
  20. CR       EQU       $D
  21. LF       EQU       $A
  22. EOT      EQU       4
  23.  PAGE
  24.          SECTION   11
  25.  
  26.  
  27. *    ***MS***   MEMORY SET
  28. *     FORMAT: MS  ADDRESS HEX HEX,HEX,'ASCII'  ETC.
  29. *     COMMAS OR SPACES BETWEEN FIELDS
  30. *     FIELDS ARE SIZE ADJUSTED (STORES UP TO 4 BYTES)
  31. *     ASCII ENCLOSED IN SINGLE QUOTES-ANY LENGTH
  32. *
  33. MSCMD    LEA       SYNTAX(PC),A0  IF NO PARAMETERS
  34.          BSR       FNEXTF    FIND NEXT FIELD
  35.          BSR       GETA      GET ADDRESS
  36.          BSR       CKADDR    CHECK VALID ADDRESS
  37.  SPC 1
  38.          MOVE.L D0,A1  A1=START (OPEN) ADDRESS
  39. SETM1    LEA       MACSBUG(PC),A0  IF NO PARAMTER
  40.          BSR       FNEXTF    FIND NEXT FIELD
  41.          MOVE.L A5,A4  SAVE ADDRESS OF PARAMTER
  42.          MOVE.B (A5),D0  CHECK OUT NEXT CHARACTER
  43.          CMP.B #$27,D0   SEE IF IT IS QUOTE MARK
  44.          BEQ.S SETM5     SPECIAL ROUTINE
  45.          CMP.B #'N',D0   SEE IF NEXT LINE FEATURE
  46.          BEQ.S     SETM7
  47.          BSR GETNUMA  GET THE DATA
  48.          MOVE.L A1,A3  ADDRESS
  49.          MOVE.L A5,D1   COMPUTE BYTES OF DATA
  50.          SUB.L A4,D1   LEN=END-START
  51.          ASR.L #1,D1  BYTES=CHAR/2
  52.          BCC.S SETM3  TAKE CARE OF ODD CHARACTER
  53.          ADD.L #1,D1  WHOLE NUMBER OF BYTES
  54. SETM3    MOVE.L D1,D2  D1 SCANS DOWN
  55.          SUB.L #1,D2  KNOCK IT DOWN TO INDEX
  56.          MOVE.B D0,0(A3,D2)  INDEXED BECAUSE BACKWARD
  57.  SPC 1
  58.          MOVE.B 0(A3,D2),D3  REREAD TO CHECK IF STORED OK
  59.  SPC 1
  60.          CMP.B D0,D3   ARE SAME?
  61.          BNE.S     SETME     'DATA DID NOT STORE'
  62.  SPC 1
  63.          ASR.L #8,D0  SHIFT ONE BYTE
  64.          ADD.L #1,A1  BUMP ADDRESS
  65.          SUB.L #1,D1
  66.          BNE SETM3
  67.          BRA.S SETM1  GO DO NEXT DATA
  68.  SPC 1
  69. *  DATA IN IN ASCII STRING
  70. SETM5    ADD.L #1,A5  GET PAST QUOTE MARK
  71. SETM6    CMP.L A6,A5  SEE IF END OF BUFFER
  72.          BGE MACSBUG
  73.          MOVE.B (A5)+,D0  GRAB CHARACTER
  74.          CMP.B #$27,D0    SEE IF QUOTE MARK
  75.          BEQ.S SETM1  IF SO-END OF STRING
  76.          MOVE.B D0,(A1)  SAVE DATA
  77.  SPC 1
  78.          MOVE.B (A1)+,D1  REREAD FOR CHECK
  79.  SPC 1
  80.          CMP.B D1,D0  SEE IF SAME
  81.          BEQ       SETM6
  82. SETME    LEA       MSG017(PC),A5 'DATA DID NOT STORE'
  83.          BSR       FIXDCRLF
  84.          BRA       MSG
  85.  SPC 1
  86. SETM7    BSR FIXBUF  DISPLAY CURRENT ADDRESS
  87.          MOVE.L A1,D0
  88.          BSR PNT8HX  PUT ADDRESS IN BUFFER
  89.          MOVE.L #'  ? ',(A6)+  PROMPT
  90.          BSR OUTPUT   DUMP BUFFER WITH NO LF CR
  91.          BSR FIXBUF  GET READY FOR INPUT
  92.          MOVE.B #' ',(A5)+   ADVANCE IN BUFFER
  93.          MOVE.L A5,A6        BECAUSE OF SNAFU IN FINDNP
  94.          BSR PORTIN1  INPUT FROM CONSOLE
  95.          MOVE.B -(A5),D0  JUST BACK UP IN BUFFER
  96.          CMP.L A6,A5
  97.          BEQ MACSBUG
  98.          BRA SETM1  DO DECODE IT
  99.  SPC 1
  100. MSG017   DC.B      'DATA DID NOT STORE',CR,LF,EOT
  101.  END